#!/bin/bash

# Example locker script -- demonstrates how to use the --transfer-sleep-lock
# option with i3lock's forking mode to delay sleep until the screen is locked.

## CONFIGURATION ##############################################################

# Options to pass to i3lock
i3lock_options="-i /tmp/screenshotblur.png -f -e"

blur() {
    convert $1 -blur 0x8 $2
    #ffmpeg  -i $1 -y -vframes 1 \
    #        -filter_complex "boxblur=10:2" \
    #        $2 2>/dev/null
#    convert $1 -filter Gaussian -resize 50% \
#            -define filter:sigma=2.5 -resize 200% $2
}

# Run before starting the locker
pre_lock() {
    gnome-screenshot /tmp/screenshot.png
    blur /tmp/screenshot.png /tmp/screenshotblur.png
    rm -f /tmp/screenshot.png
    return
}

# Run after the locker exits
post_lock() {
    rm -f /tmp/screenshotblur.png
    return
}

###############################################################################

pre_lock

# We set a trap to kill the locker if we get killed, then start the locker and
# wait for it to exit. The waiting is not that straightforward when the locker
# forks, so we use this polling only if we have a sleep lock to deal with.
if [[ -e /dev/fd/${XSS_SLEEP_LOCK_FD:--1} ]]; then
    kill_i3lock() {
        pkill -xu $EUID "$@" i3lock
    }

    trap kill_i3lock TERM INT

    # we have to make sure the locker does not inherit a copy of the lock fd
    i3lock $i3lock_options {XSS_SLEEP_LOCK_FD}<&-

    # now close our fd (only remaining copy) to indicate we're ready to sleep
    exec {XSS_SLEEP_LOCK_FD}<&-

    while kill_i3lock -0; do
        sleep 0.5
    done
else
    trap 'kill %%' TERM INT
    i3lock -n $i3lock_options &
    wait
fi

post_lock
